#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <termios.h>

#define UART_DEVICE "/dev/ttyCH9344USB7"
#define SCRIPT_PATH "/userfs/485_1.sh"

int main() {
    int fd;
    char buffer[256];
    ssize_t bytes_read;

    // 1. 使用脚本设置为接收模式并配置串口
    if (system(SCRIPT_PATH " 0") != 0) {
        perror("Failed to run 485_1.sh 0");
        return 1;
    }

    // 2. 打开串口（只读即可，但我们用 O_RDWR 以便后续发送）
    fd = open(UART_DEVICE, O_RDWR | O_NOCTTY);
    if (fd < 0) {
        perror("Failed to open UART device");
        return 1;
    }

    printf("485 Echo Server: Waiting for data...\n");

    while (1) {
        // 3. 阻塞读取至少1字节（脚本已用 stty 设置 min=1）
        bytes_read = read(fd, buffer, sizeof(buffer) - 1);
        if (bytes_read > 0) {
            buffer[bytes_read] = '\0';
            printf("Received: %s", buffer); // 注意：buffer 可能不含 \n
            printf("$(date): 485-1 测试成功\n");

            // 4. 切换到发送模式
            system(SCRIPT_PATH " 1");

            // 5. 回显原样数据
            write(fd, buffer, bytes_read);
            printf("Echoed back %zd bytes.\n", bytes_read);

            // 6. 切回接收模式
            system(SCRIPT_PATH " 0");
        } else if (bytes_read == 0) {
            // 正常情况不会发生（因为 min=1），但保留处理
            usleep(10000); // 10ms
        } else {
            perror("Read error");
            break;
        }
    }

    close(fd);
    return 0;
}